package com.qf.rbac2202.utils;

import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qf.rbac2202.sys.entity.SysUser;

import java.util.Map;

public class PageQueryUtil<T> {

    /**
     * 如果完全按照 params 中的排序字段进行排序，那么就用这个方法
     * @param params
     * @param <T>
     * @return
     */
    public static <T> Page<T> getPage(Map<String,String> params){

        Page<T> page = getPage(params,null,null);
        return page;
    }


    /**
     * 如果，params 没有指定排序字段，想使用默认的排序字段，就用这个方法
     * @param params
     * @param colum
     * @param asc
     * @param <T>
     * @return
     */
    // 如果 params 中有排序字段，就安装 该排序字段设置排序
    // 如果 params 没有传递 排序字段， 那么可以 给定一个默认的排序字段和默认的排序顺序
    public static <T> Page<T>  getPage(Map<String, String> params, String colum, String asc) {

        final Long currentPage = Long.valueOf(params.get("page"));  // 当前页

        final Long limit = Long.valueOf(params.get("limit"));

        final String sidx = SQLFilter.sqlInject(params.get("sidx"));  // 排序字段

        final String order = params.get("order");   // 升序还是降序

        final Page<T> page = new Page<>(currentPage, limit);

        // 当页面传递了 排序字段时
        if (StringUtils.isNotBlank(sidx)) {
            if (StringUtils.isNotBlank(order)&& order.equals("desc")){
                page.addOrder(OrderItem.desc(sidx));
            }else {
                page.addOrder(OrderItem.asc(sidx));
            }
            return page;
        }

        // 如果默认的排序字段为null，那么不生成排序的语句
        if (!StringUtils.isNotBlank(colum)) {
            return page;
        }

        // 安装传递的默认字段进行排序
        if (StringUtils.isNotBlank(asc)) {

            if (asc.equals("desc")) {
                page.addOrder(OrderItem.desc(colum));
            }else {
                page.addOrder(OrderItem.asc(colum));
            }

        }
        return page;

    }




}
